home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Games / WormWars / Source / same.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-03-13  |  16.1 KB  |  461 lines

  1. /* $Filename:    WormWars/Source/same.h
  2.  * $VER:         WormWars 6.9
  3.  * $Description: Header file for Worm Wars
  4.  *
  5.  * © Copyright 2002 James R. Jacobs.
  6.  
  7. SAME ON EACH PLATFORM -------------------------------------------------- */
  8.  
  9. #define elif         else if
  10. #define AGLOBAL      ;       /* global (project-scope) */
  11. #define MODULE       static  /* external static (file-scope) */
  12. #define PERSIST      static  /* internal static (function-scope) */
  13. #define AUTO         auto    /* automatic (function-scope) */
  14.  
  15. /* miscellaneous */
  16.  
  17. #define CAUSEWAIT      100
  18. #define DATELENGTH       8 /* DD/MM/YY */
  19. #define TIMELENGTH       5 /* HH:MM */
  20. #define DEFAULTLEVELS    5
  21. #define ENDXPIXEL     ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
  22. #define ENDYPIXEL     ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
  23. #define FIELDX          52 /* in squares */
  24. #define FIELDY          38 /* in squares */
  25. #define HISCORES         4
  26. #define LIFEMODULO    1000
  27. #define MAXLEVELS       50 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
  28. #define NAMELENGTH      21 /* 0..20 are TEXT, 21 is NULL */
  29. #define NOMODE           0
  30. #define NUMKEYS         28
  31. #define PATIENCE       100
  32. #define SAYLIMIT      ((ENDXPIXEL - STARTXPIXEL) / FONTX)
  33. #define VERSION       "$VER: Worm Wars 6.9 (8.2.2002)" // always d.m.y format
  34. #define ARROWX        (FIELDX + 1)
  35. #define LEVELSIZE     ((FIELDX + 1) * (FIELDY + 1))
  36. #define HISCORESIZE   (6 + NAMELENGTH + 1 + DATELENGTH + 1 + TIMELENGTH + 1)
  37.  
  38. #define BONUS_TAIL     1
  39. #define BONUS_TIME    10
  40. #define BONUS_LEVEL  100
  41.  
  42. /* samples */
  43.  
  44. #define FXBORN_DOG        0
  45. #define FXBORN_DRIP       1
  46. #define FXBORN_GOAT       2
  47. #define FXBORN_MISSILE    3
  48. #define FXBORN_ORB        4
  49. #define FXBORN_PENGUIN    5
  50. #define FXBORN_PROTECTOR  6
  51. #define FXDEATH_FRAGMENT  7 // thud
  52. #define FXDEATH_GOAT      8
  53. #define FXDEATH_ORB       9
  54. #define FXDEATH_PENGUIN  10
  55. #define FXDEATH_WORM     11
  56. #define FXDO_BOMB        12 // tick
  57. #define FXDO_ENCLOSE     13
  58. #define FXDO_GOAT        14 // fire
  59. #define FXDO_JUMP        15
  60. #define FXDO_ORB         16 // split
  61. #define FXGET_AMMO       17
  62. #define FXGET_CYCLONE    18
  63. #define FXGET_DRIP       19
  64. #define FXGET_GROWER     20
  65. #define FXGET_OBJECT     21
  66. #define FXGET_NITRO      22
  67. #define FXGET_POWERUP    23
  68. #define FXGET_PULSE      24 // explode
  69. #define FXGET_SKULL      25
  70. #define FXFILENEW        26
  71. #define FXFILEOPEN       27
  72. #define FXFILESAVE       28
  73. #define FXFILESAVEAS     29
  74. #define FXEDITCUT        30
  75. #define FXEDITCOPY       31
  76. #define FXEDITPASTE      32
  77. #define FXEDITDELETE     33
  78. #define FXHELP           34
  79. #define FXUSE_AMMO       35
  80. #define FXUSE_ARMOUR     36
  81. #define FXUSE_BOMB       37
  82. #define FXUSE_TELEPORT   38
  83. #define FXBORN_BIRD      39
  84. #define FX_C             40
  85. #define FX_O             41
  86. #define FX_M             42
  87. #define FX_P             43
  88. #define FX_L             44
  89. #define FX_E             45
  90. #define FX_T             46
  91. #define FXPAIN           47
  92. #define FXAPPLAUSE       51 // after each new hiscore
  93. #define FXGAMEOVER       52 // if all worms are dead
  94. #define FXCELEBRATE      53 // if game succeeded
  95. #define FXCLICK          54 // rundown, keypresses
  96. #define FXLAUNCH         55 // title screen
  97. #define FXRIFF           56 // after each rundown
  98. #define FXSIREN          57 // out of time
  99. #define SAMPLES          FXSIREN
  100. #define FXCENTRE         FXDEATH_PENGUIN
  101. #define FXDO_CLOUD       FXDO_GOAT
  102. #define FXFX             FXLAUNCH
  103. #define FXRUNDOWN        FXCLICK
  104. #define FXUSE_PROTECTOR  FXBORN_PROTECTOR
  105.  
  106. #define PAIN_BIRD         3
  107. #define PAIN_BOMB         3
  108. #define PAIN_CLOUD        3
  109. #define PAIN_DOG          5
  110. #define PAIN_DRIP         5
  111. #define PAIN_FISH         2
  112. #define PAIN_FRAGMENT     3
  113. #define PAIN_GOAT         2
  114. #define PAIN_HEAD         5
  115. #define PAIN_LIGHTNING    3
  116. #define PAIN_METAL        3
  117. #define PAIN_MISSILE      5
  118. #define PAIN_OCTOPUS      5
  119. #define PAIN_ORB          5
  120. #define PAIN_OTTER        5
  121. #define PAIN_PENGUIN      3
  122. #define PAIN_PROTECTOR    5
  123. #define PAIN_REMNANT      5
  124. #define PAIN_SLAYER       2
  125. #define PAIN_SLIME        2
  126. #define PAIN_STONE        1
  127. #define PAIN_TELEPORT     5
  128. #define PAIN_WHIRLWIND    5
  129. #define PAIN_WORMFIRE     5
  130. #define PAIN_WOOD         1
  131. #define PAIN_ENEMYTAIL    3
  132. #define PAIN_FRIENDLYTAIL 1
  133.  
  134. #define SCORE_BIRD          40
  135. #define SCORE_CLOUD         20
  136. #define SCORE_FRAGMENT      10
  137. #define SCORE_DOG           20
  138. #define SCORE_DRIP         100
  139. #define SCORE_FISH          20
  140. #define SCORE_GOAT          50
  141. #define SCORE_MISSILE       50
  142. #define SCORE_OCTOPUS       60
  143. #define SCORE_ORB           40
  144. #define SCORE_OTTER        150
  145. #define SCORE_PENGUIN       20
  146. #define SCORE_TIMEBOMB     100
  147. #define SCORE_WHIRLWIND    100
  148.  
  149. /* key types */
  150.  
  151. #define MOVE              0 /* not AMMO, TRAINER, ONEHUMAN */
  152. #define TRAINER           2 /* not MOVE, AMMO, ONEHUMAN */
  153. #define ONEHUMAN          3 /* not MOVE, AMMO, TRAINER */
  154.  
  155. /* speeds */
  156.  
  157. #define VERYFAST          1
  158. #define FAST              2
  159. #define NORMAL            4
  160. #define SLOW              8
  161. #define VERYSLOW         16 /* must be non-0 */
  162.  
  163. /* The constant NORMAL is used for several purposes:
  164.     a)  as a speed (therefore must not be VERYFAST, FAST, SLOW
  165.         or VERYSLOW);
  166.     b)  as a blitmode (therefore must not be BLACK or WHITE); and
  167.     c)  as a pointer (therefore must not be anything that can be
  168.         a brush).
  169.  
  170. stats */
  171.  
  172. #define AMMOLIMIT       100
  173. #define BIASLIMIT       100
  174. #define FREEDOMLIMIT    100
  175. #define STARTLIVES      100
  176. #define LIVESLIMIT      200
  177. #define MODELIMIT       100
  178. #define MULTILIMIT        8 /* don't set >8! */
  179. #define POWERLIMIT        6
  180. #define SCORELIMIT 99999999 // 99 million
  181.  
  182. /* Field values...
  183. These are objects. */
  184.     #define AFFIXER              0
  185.     #define AMMO                 1
  186.     #define ARMOUR               2
  187.     #define BIAS                 3
  188.     #define BOMB                 4
  189.     #define BONUS                5
  190.     #define CLOCK                6
  191.     #define CONVERTER            7
  192.     #define CUTTER               8
  193.     #define CYCLONE              9
  194.     #define ENCLOSER            10
  195.     #define FREEDOM             11
  196.     #define GROWER              12
  197.     #define HEALER              13
  198.     #define ICE                 14
  199.     #define LIFE                15
  200.     #define LIGHTNING           16
  201.     #define MAGNET              17
  202.     #define MISSILE             18
  203.     #define MULTIPLIER          19
  204.     #define NITRO               20
  205.     #define POWER               21
  206.     #define PROTECTOR           22
  207.     #define PULSE               23
  208.     #define PUSHER              24
  209.     #define REMNANTS            25
  210.     #define SIDESHOT            26
  211.     #define SLAYER              27
  212.     #define SLOWER              28
  213.     #define SWITCHER            29
  214.     #define TREASURE            30
  215.     #define UMBRELLA            31
  216.     #define LASTOBJECT          UMBRELLA
  217. /* These are `empty'. */
  218.     #define EMPTY               (LASTOBJECT + 1)
  219.     #define SILVER              (LASTOBJECT + 2)
  220.     #define GOLD                (LASTOBJECT + 3)
  221.     #define FIRSTEMPTY          EMPTY
  222.     #define LASTEMPTY           GOLD
  223.     #define LASTGOATFIRE        LASTEMPTY
  224. /* Nothing special about the following... */
  225.     #define TELEPORT            (GOLD + 1)
  226.     #define FRAGMENT            (GOLD + 2)
  227.     #define ORB                 (GOLD + 3)
  228.     #define FIRSTPROTECTOR      (GOLD + 4)
  229.     #define LASTPROTECTOR       (GOLD + 7)
  230. /* Margins indicate `ranges' for:
  231.    n: orb bouncing, normal mode.
  232.    g: goats. */
  233.         #define  GREEN_C                        (GOLD +  8)      
  234.         #define    RED_O                        (GOLD +  9)
  235.         #define   BLUE_M                        (GOLD + 10)
  236.         #define YELLOW_P                        (GOLD + 11)
  237.         #define  GREEN_L                        (GOLD + 12)
  238.         #define    RED_E                        (GOLD + 13)
  239.         #define   BLUE_T                        (GOLD + 14)
  240.         #define YELLOW_E                        (GOLD + 15)
  241.         #define SKULL                           (GOLD + 16)             /* n g */
  242.         #define SLIME                           (GOLD + 17)             /*   [ */
  243.         #define STONE                           (GOLD + 18)             /* [ | */
  244.         #define GOAT                            (GOLD + 19)             /* ] | */
  245.         #define WOOD                            (GOLD + 20)             /*   | */
  246.         #define FIRSTTAIL                       (GOLD + 21)             /*   | */
  247.         #define LASTTAIL                        (GOLD + 24)             /*   ] */
  248.         #define FIRSTLETTER        GREEN_C
  249.         #define LASTLETTER         YELLOW_E
  250.         #define LASTNONE           LASTTAIL
  251.         #define LETTERS            (LASTLETTER - FIRSTLETTER)
  252.         #define FISH               (LASTTAIL +  1)
  253.         #define OTTER              (LASTTAIL +  2)
  254.         #define FIRSTFIRE          (LASTTAIL +  3)
  255.         #define LASTFIRE           (LASTTAIL +  6)
  256.         #define FIRSTMISSILE       (LASTTAIL +  7)
  257.         #define LASTMISSILE        (LASTTAIL + 10)
  258.         #define START              (LASTTAIL + 11)
  259.         #define MUSIC              (LASTTAIL + 12)
  260.         #define FX                 (LASTTAIL + 13)
  261.         #define ZERO               (LASTTAIL + 14)
  262.         #define TIMEBOMB            ZERO
  263.         #define       HEAD         (ZERO + 10)
  264.         #define  GREENHEADUP        HEAD
  265.         #define    REDHEADUP       (HEAD +  1)
  266.         #define   BLUEHEADUP       (HEAD +  2)
  267.         #define YELLOWHEADUP       (HEAD +  3)
  268.         #define  FIRSTHEAD         GREENHEADUP
  269.         #define   LASTHEAD         YELLOWHEADUP
  270.         #define  GREENHEADDOWN     (HEAD +  4)
  271.         #define    REDHEADDOWN     (HEAD +  5)
  272.         #define   BLUEHEADDOWN     (HEAD +  6)
  273.         #define YELLOWHEADDOWN     (HEAD +  7)
  274.         #define  GREENHEADLEFT     (HEAD +  8)
  275.         #define    REDHEADLEFT     (HEAD +  9)
  276.         #define   BLUEHEADLEFT     (HEAD + 10)
  277.         #define YELLOWHEADLEFT     (HEAD + 11)
  278.         #define  GREENHEADRIGHT    (HEAD + 12)
  279.         #define    REDHEADRIGHT    (HEAD + 13)
  280.         #define   BLUEHEADRIGHT    (HEAD + 14)
  281.         #define YELLOWHEADRIGHT    (HEAD + 15)
  282.         #define  GREENMODEUP       (HEAD + 16)
  283.         #define    REDMODEUP       (HEAD + 17)
  284.         #define   BLUEMODEUP       (HEAD + 18)
  285.         #define YELLOWMODEUP       (HEAD + 19)
  286.         #define  GREENMODEDOWN     (HEAD + 20)
  287.         #define    REDMODEDOWN     (HEAD + 21)
  288.         #define   BLUEMODEDOWN     (HEAD + 22)
  289.         #define YELLOWMODEDOWN     (HEAD + 23)
  290.         #define  GREENMODELEFT     (HEAD + 24)
  291.         #define    REDMODELEFT     (HEAD + 25)
  292.         #define   BLUEMODELEFT     (HEAD + 26)
  293.         #define YELLOWMODELEFT     (HEAD + 27)
  294.         #define  GREENMODERIGHT    (HEAD + 28)
  295.         #define    REDMODERIGHT    (HEAD + 29)
  296.         #define   BLUEMODERIGHT    (HEAD + 30)
  297.         #define YELLOWMODERIGHT    (HEAD + 31)
  298.         #define METAL              (HEAD + 32)
  299.         #define FIRSTDRIP          (HEAD + 33)
  300.         #define DRIP               FIRSTDRIP
  301.         #define LASTDRIP           (HEAD + 36)
  302.         #define BLACKENED          (HEAD + 37)
  303.         #define WHITENED           (HEAD + 38)
  304.         #define PENGUIN            (HEAD + 39)
  305.         #define WHIRLWIND          (HEAD + 40)
  306.         #define DOG                (HEAD + 41) /* dog chasing */
  307.         #define DOGAWAKENING       (HEAD + 42)
  308.         #define DOGDORMANT         (HEAD + 43)
  309.         #define CLOUD              (HEAD + 44)
  310.         #define ALL                (HEAD + 45)
  311.         #define FIRSTARROW         (HEAD + 46)
  312.         #define LASTARROW          (HEAD + 49)
  313.         #define DYNAMITE           (HEAD + 50)
  314.         #define OCTOPUS            (HEAD + 51)
  315.         #define FIRSTMISSILEFRAME  (HEAD + 52)
  316.         #define BIRD               (FIRSTMISSILEFRAME + 20)
  317.         #define ARRAYSIZE          (BIRD + 2)
  318.  
  319.         #define ANYTHING           STONE // should be something that is valid field contents
  320.  
  321. /* These have no imagery. */
  322.         #define TEMPTAIL         (ARRAYSIZE + 1)
  323.         #define TEMPWOOD         TEMPTAIL
  324.         #define TEMPSLIME        TEMPTAIL
  325.         #define TEMPLIGHTNING    TEMPTAIL
  326.         #define TEMPSILVER       (ARRAYSIZE + 2)
  327.         #define TEMPGOLD         (ARRAYSIZE + 3)
  328.         #define NOSQUARE         (ARRAYSIZE + 4)
  329.         #define BANGDYNAMITE     (ARRAYSIZE + 5)
  330.         #define TEMPBANGDYNAMITE (ARRAYSIZE + 6)
  331.         #define TEMPDYNAMITE     (ARRAYSIZE + 7)
  332.  
  333. /* game status */
  334.  
  335. #define GAMEOVER        0
  336. #define PLAYGAME        1
  337. #define FIELDEDIT       2
  338. #define TITLESCREEN     3
  339.  
  340. /* indicator locations */
  341.  
  342. #define CAUSEYDISTANCE  2 /* distance from centre for cause */
  343. #define LETTERYDISTANCE 3 /* distance from centre for letters */
  344. #define ICONY           (FIELDY / 2)
  345. #define MUSICICON       (FIELDX + 3)
  346. #define CLOCKICON       (FIELDX + 4)
  347.  
  348. /* control values */
  349.  
  350. #define NONE            0 /* must be 0 */
  351. #define AMIGA           1
  352. #define JOYSTICK        2
  353. #define GAMEPAD         3
  354. #define KEYBOARD        4
  355. #define IBMPC           AMIGA
  356.  
  357. #define MISSILEFRAMES 5
  358.  
  359. /* PROTOTYPES -------------------------------------------------------------
  360.  
  361. engine.c */
  362.  
  363. AGLOBAL void clearhiscores(void);
  364. AGLOBAL void enginesetup(void);
  365. AGLOBAL void gameloop(void);
  366. AGLOBAL void matchteleports(void);
  367. AGLOBAL void newfields(void);
  368. AGLOBAL void newgame(void);
  369. AGLOBAL void timeloop(void);
  370. AGLOBAL void newfield(void);
  371.  
  372. AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
  373. AGLOBAL void drawsquare(SBYTE x, SBYTE y);
  374. AGLOBAL void icon(SBYTE player, UBYTE image);
  375. AGLOBAL void saylevel(COLOUR colour);
  376. AGLOBAL void train(SCANCODE scancode);
  377. AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
  378. AGLOBAL void wormscore(SBYTE player, ULONG score);
  379.  
  380. AGLOBAL SBYTE loadfields(STRPTR pathname);
  381. AGLOBAL SBYTE partner(SBYTE which);
  382. AGLOBAL ABOOL savefields(STRPTR pathname);
  383. AGLOBAL SBYTE valid(SBYTE x, SBYTE y);
  384. AGLOBAL SBYTE xwrap(SBYTE x);
  385. AGLOBAL SBYTE ywrap(SBYTE y);
  386. AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler)
  387.  
  388. /* system.c */
  389.  
  390. AGLOBAL void celebrate(void);
  391. AGLOBAL void clearkybd(void);
  392. AGLOBAL void clearscreen(void);
  393. AGLOBAL void datestamp(void);
  394. AGLOBAL void gameinput(void);
  395. AGLOBAL void hiscores(void);
  396. AGLOBAL void resettime(void);
  397. AGLOBAL void systemsetup(void);
  398. AGLOBAL void timing(void);
  399. AGLOBAL void titlescreen(void);
  400. AGLOBAL void turborender(void);
  401. AGLOBAL void waitasec(void);
  402.  
  403. AGLOBAL void cleanexit(SLONG rc);
  404. AGLOBAL void draw(SBYTE x, SBYTE y, UBYTE image);
  405. AGLOBAL void effect(SBYTE index);
  406. AGLOBAL void fileopen(ABOOL revert);
  407. AGLOBAL void filesaveas(ABOOL flag);
  408. AGLOBAL void flash(ULONG where);
  409. AGLOBAL void rundown(SBYTE player);
  410. AGLOBAL void say(STRPTR sentence, COLOUR colour);
  411. AGLOBAL void stat(SBYTE player, SBYTE line);
  412. AGLOBAL void stopfx(void);
  413. AGLOBAL void ReadAdapterJoystick(UBYTE unit);
  414. AGLOBAL void ReadStandardJoystick(ULONG port);
  415. AGLOBAL void ReadGamepads(void);
  416.  
  417. AGLOBAL ABOOL anykey(ABOOL timeout);
  418. AGLOBAL ABOOL verify(void);
  419. AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write);
  420. AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length);
  421. AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
  422. AGLOBAL ABOOL ZClose(void);
  423.  
  424. AGLOBAL void help(UBYTE type);
  425. AGLOBAL void helpabout(void);
  426. AGLOBAL void helploop(UBYTE type);
  427. AGLOBAL void toggle(SBYTE key);
  428. AGLOBAL void filedelete(void);
  429.  
  430. // fe.c
  431. AGLOBAL void fieldedit(void);
  432. AGLOBAL void setbrush(UBYTE newbrush);
  433.  
  434. /* PUBLIC STRUCTURES ------------------------------------------------------ */
  435.  
  436. AGLOBAL struct HiScoreStruct
  437. {   SBYTE player, level;
  438.     ULONG score;                /* the score itself */
  439.     TEXT  name[NAMELENGTH + 2];    /* name of the player */
  440.     ABOOL fresh;                /* is the entry new? */
  441.     TEXT  date[DATELENGTH + 1],    /* date of achievement */
  442.           time[TIMELENGTH + 1];    /* time of achievement */
  443. };
  444. AGLOBAL struct WormStruct
  445. {   SBYTE  x, y, deltax, deltay, position, posidir, victor,
  446.            statx, staty, pos, levelreached, arrowy;
  447.     ABOOL  affixer, encloser, remnants, alive, moved, nitro, pusher,
  448.            sideshot, flashed, rammed;
  449.     UBYTE  speed, control, cause, last, multi, power;
  450.     SWORD  armour, ammo, bias, cutter, lives, freedom;
  451.     ULONG  score, oldscore, hiscore, dynamitescore, causewait, port;
  452.     TEXT   name[NAMELENGTH + 1];
  453.     COLOUR colour;
  454. };
  455. AGLOBAL struct TeleportStruct
  456. {   SBYTE x, y;
  457.     ABOOL alive;
  458. };
  459.  
  460. /* Must have blank line at EOF. */
  461.